﻿Imports System.Collections.ObjectModel


Class CMConfigLI

   Private negocio As CLoadInstrumentServicio 
   Private  TipoValorEnEDICION  As CTipoValorLI 
   Private  TipoLIEnEdicion     As CTDecalogData 


    Public Sub New()
        
        
        InitializeComponent()
        
   
          negocio = New CLoadInstrumentServicio()
        


        'CARGA DE TIPOS DE EMISORA
        'Esta caraga se puede hacccer dinámica en caso de que aparezcan más tipos Valor
        Dim itmGub As New CTipoValorLI ()
        Dim itmBan As New CTipoValorLI ()
        Dim itmCor As New CTipoValorLI ()


        itmGub.IdEmisora = CTipoValorLI.TipoEmisora.Gubernamental
        
        itmBan.IdEmisora = CTipoValorLI.TipoEmisora.Bancario 
        
        itmCor.IdEmisora = CTipoValorLI.TipoEmisora.Corporativo 
        

        cmbTipoValor.Items.Add(itmGub)

        cmbTipoValor.Items.Add(itmBan)
        cmbTipoValor.Items.Add(itmCor)
        cmbTipoValor.SelectedIndex = 0


          



        'CARGA DE TIPOS DE DATOS DECALOG

        dim lstTipoDecalog As ObservableCollection (Of CTDecalogData )

        lstTipoDecalog = negocio.obtenerDecalogData ()
        Me.grdTiposDecalog.ItemsSource =  lstTipoDecalog
        Me.grdTiposDecalog.Items.Refresh ()



        Mouse.OverrideCursor = Nothing


        
    End Sub


    Private Sub cmbTipoValor_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles cmbTipoValor.SelectionChanged
        Mouse.OverrideCursor = Cursors.Wait

        Me.grdTiposValor.ItemsSource = negocio.ObtenerTipoValor(CType(CType(sender, ComboBox).SelectedItem, CTipoValorLI).IdEmisora)
        Me.grdTiposValor.Items.Refresh()

        Mouse.OverrideCursor = Nothing

    End Sub




    Private Sub grdTiposValor_CellEditEnding(ByVal sender As System.Object, ByVal e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles grdTiposValor.CellEditEnding


        Dim Tipos      As ObservableCollection(Of CTipoValorLI ) = grdTiposValor.ItemsSource
        Dim tipoActual As CTipoValorLI 
        Dim tipoCambio As New CTipoValorLI ()
        

        Select Case e.EditAction

            Case DataGridEditAction.Commit

                If Not sender.CurrentItem Is Nothing Then

                    Dim txtContenidoCelda As Object = grdTiposValor.Columns(0).GetCellContent(grdTiposValor.CurrentItem)
                    tipoActual = TryCast(grdTiposValor.CurrentCell.Item, CTipoValorLI  )

                    If tipoActual.Equals(TipoValorEnEDICION ) = False Then
                        CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                    End If


                    tipoCambio.TipoValor = txtContenidoCelda.Text
                    tipoCambio.IdEmisora  = CType ( cmbTipoValor.SelectedItem,CTipoValorLI).IdEmisora 
                    tipoCambio.EsEditableNuevo = tipoActual.EsEditableNuevo
                    



                    If tipoCambio.EsEditableNuevo Then
                        Try
                            tipoCambio.EsEditableNuevo = False
                            negocio.AltaTipoValorLI(tipoCambio.IdEmisora,tipoCambio.DescEmisora,tipoCambio.TipoValor) 
                            
                        Catch ex As Exception
                            MessageBox.Show("Error TI500. Error al intentar guardar el tipo de valor """ & tipoCambio.TipoValor & ": " & ex.Message, "Alta de tipo de valor", MessageBoxButton.OK, MessageBoxImage.Error)
                            CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                        End Try
                    Else

                        Try
                            negocio.ActualizarTipoLI  (tipoActual.IdEmisora ,tipoActual.TipoValor,tipoCambio.TipoValor   )
                        Catch ex As Exception
                            MessageBox.Show("Error TI500. Error al intentar guardar el tipo de valor '" & tipoCambio.TipoValor & "': " & ex.Message, "Alta de tipo de valor", MessageBoxButton.OK, MessageBoxImage.Error)
                            CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                        End Try

                    End If
                Else
                    CType(sender, DataGrid).CancelEdit(DataGridEditingUnit.Cell)
                End If

            Case DataGridEditAction.Cancel

                tipoCambio = TryCast(grdTiposValor.Items(grdTiposValor.Items.Count - 1), CTipoValorLI  )

                If tipoCambio.EsEditableNuevo Then
                    Tipos.Remove(tipoCambio)
                    grdTiposValor.UpdateLayout()
                End If


        End Select


        TipoValorEnEDICION  = Nothing

    End Sub

    Private Sub grdTiposValor_BeginningEdit(ByVal sender As System.Object, ByVal e As System.Windows.Controls.DataGridBeginningEditEventArgs) Handles grdTiposValor.BeginningEdit
        TipoValorEnEDICION = grdTiposValor.CurrentItem
    End Sub

    Private Sub imgEliminarTipoValor_MouseLeftButtonUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles imgEliminarTipoValor.MouseLeftButtonUp

        Dim tipos As ObservableCollection(Of CTipoValorLI  ) = grdTiposValor.ItemsSource
        Dim tipoElim As New ObservableCollection(Of CTipoValorLI )
        Dim tipoNoElim As New ObservableCollection(Of CTipoValorLI )

        Dim nomtiposNoElim As New System.Text.StringBuilder()
              

        If grdTiposValor.SelectedCells.Count > 0 Then
            If MessageBox.Show("Esta seguro que desea eliminar las celdas seleccionadas", "Eliminar Tipos Valmer", MessageBoxButton.OKCancel, MessageBoxImage.Question) = MessageBoxResult.OK Then



                For Each celda As DataGridCellInfo In grdTiposValor.SelectedCells
                    tipoElim.Add(CType(celda.Item, CTipoValorLI ))
                Next

                For Each tipo As CTipoValorLI   In tipoElim
                    Try
                        If negocio.EliminarTipoLI (tipo.IdEmisora,tipo.TipoValor)   Then
                        tipos.Remove(tipo)
                    Else
                        tipoNoElim.Add(tipo)
                    End If
                    Catch ex As Exception
                       
                    End Try
                    
                Next

            End If
        End If

        grdTiposValor.UpdateLayout()


        If tipoNoElim.Count > 0 Then
            For Each tipo As CTipoValorLI   In tipoNoElim
                nomtiposNoElim.Append(tipo.TipoValor )
                nomtiposNoElim.Append(", ")
            Next

            MessageBox.Show("Los Tipos de Valor: " & nomtiposNoElim.ToString() & " no pudieron ser eliminados.", "Eliminar Tipos Valor", MessageBoxButton.OK, MessageBoxImage.Exclamation)

        End If



    End Sub

    Private Sub imgAgregarTipoValor_MouseLeftButtonUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles imgAgregarTipoValor.MouseLeftButtonUp

        
        Dim regNvo As New CTipoValorLI (CType ( cmbTipoValor.SelectedItem,CTipoValorLI ).IdEmisora,"Escriba aqui...",True)


        Dim lstTipos As New ObservableCollection(Of CTipoValorLI )

        lstTipos = grdTiposValor.ItemsSource
        lstTipos.Add(regNvo)
        grdTiposValor.ScrollIntoView(grdTiposValor.Items(grdTiposValor.Items.Count - 1))
        grdTiposValor.UpdateLayout()


        Dim celda As DataGridCell = ObtenerCelda(grdTiposValor, grdTiposValor.Items.Count - 1, 0)
        If Not celda Is Nothing Then
            celda.Focus()
            grdTiposValor.BeginEdit()
            celda.IsSelected = True
        End If


    End Sub
    





    
    Private Sub grdTiposDecalog_CellEditEnding(ByVal sender As System.Object , ByVal e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles grdTiposDecalog.CellEditEnding          
   
        Dim nombres      As ObservableCollection(Of CTDecalogData ) = grdTiposDecalog.ItemsSource
        Dim nombreActual As CTDecalogData 
        Dim nombreCambio As New CTDecalogData()
      
                       
        
        Select Case e.EditAction

            Case DataGridEditAction.Commit

              If not sender.CurrentItem is Nothing then

                    Dim txtContenidoCelda_1 As Object   = grdTiposDecalog.Columns(0).GetCellContent(grdTiposDecalog.CurrentItem)         
                    Dim txtContenidoCelda_2 As Object   = grdTiposDecalog.Columns(1).GetCellContent(grdTiposDecalog.CurrentItem)         
                    nombreActual = TryCast(grdTiposDecalog.CurrentCell.Item, CTDecalogData)


                    If nombreActual.Equals (TipoLIEnEdicion) = False then 
                         CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)  
                    End If
                                        
                    
                   nombreCambio.ValorBuscado  = txtContenidoCelda_1.text 
                   nombreCambio.ValorCorres  = txtContenidoCelda_2.text 
                   nombreCambio.EsEditableNuevo = nombreActual.EsEditableNuevo  
                    
                    


                    If nombreCambio.EsEditableNuevo Then
                        Try
                            nombreCambio.EsEditableNuevo = False                                                                    
                            negocio.AltaDecalogdata  (nombreCambio.ValorBuscado ,nombreCambio.ValorCorres )                                                        
                            nombreActual.ValorBuscado  = nombreCambio.ValorBuscado
                            nombreActual.ValorCorres = nombreCambio.ValorCorres
                            nombreActual.EsEditableNuevo = False    

                        Catch ex As Exception
                            MessageBox.Show("Error TI500. Error al intentar guardar el tipo Decalog """ & nombreCambio.ValorBuscado & ": " & ex.Message, "Nombres Bench", MessageBoxButton.OK, MessageBoxImage.Error)
                            CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)
                        End Try                   
                    else

                        Try
                           negocio.ActualizarDecalogData  (nombreActual.ValorBuscado, nombreActual.ValorCorres , nombreCambio.ValorBuscado, nombreCambio.ValorCorres  )
                        Catch ex As Exception
                            MessageBox.Show("Error TI500. Error al intentar guardar el tipo Decalog""" & nombreCambio.ValorBuscado & ": " & ex.Message, "Nombres Bench", MessageBoxButton.OK, MessageBoxImage.Error)
                            CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)
                        End Try 

                    End If
               else
                  CType(sender,DataGrid).CancelEdit (DataGridEditingUnit.Cell)  
               End If

            Case DataGridEditAction.Cancel
                 
                nombreCambio = TryCast(grdTiposDecalog.Items(grdTiposDecalog.Items.Count - 1),CTDecalogData  )
                
                if nombreCambio.EsEditableNuevo then 
                   nombres.Remove(nombreCambio)                    
                    grdTiposDecalog.UpdateLayout()                          
                End If


        End Select


        TipoLIEnEdicion = Nothing 

    End Sub

    Private Sub grdTiposDecalog_BeginningEdit(ByVal sender As System.Object , ByVal e As System.Windows.Controls.DataGridBeginningEditEventArgs) Handles grdTiposDecalog.BeginningEdit
       TipoLIEnEdicion = grdTiposDecalog.CurrentItem    
    End Sub    

    Private Sub imgAgregarTipoDec_MouseLeftButtonUp(ByVal sender As System.Object , ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles imgAgregarTipoDec.MouseLeftButtonUp
          
          Dim regNvo As new CTDecalogData ("Escriba aqui...","",true)
  
          Dim lstNombres As new ObservableCollection (Of CTDecalogData )
          
           lstNombres = grdTiposDecalog.ItemsSource 
           lstNombres.Add (regNvo)             
           grdTiposDecalog.ScrollIntoView (grdTiposDecalog.Items(grdTiposDecalog.Items.Count-1))
           grdTiposDecalog.UpdateLayout()
  

          Dim celda As DataGridCell  = ObtenerCelda (grdTiposDecalog,grdTiposDecalog.Items.Count-1,0)
          If Not celda is Nothing 
            celda.Focus()
            grdTiposDecalog.BeginEdit () 
            celda.IsSelected = true    
          End If


    End Sub

    Private Sub imgEliminarTipoDec_MouseLeftButtonUp(ByVal sender As System.Object , ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles imgEliminarTipoDec.MouseLeftButtonUp

         Dim nombres As ObservableCollection(Of CTDecalogData   ) = grdTiposDecalog.ItemsSource
         Dim nombreElim As new ObservableCollection(Of CTDecalogData)
         Dim nombreNoElim As new ObservableCollection(Of CTDecalogData  )

         Dim NombresNoElimTx As new System.Text.StringBuilder ()

         

        Try

        

          If grdTiposDecalog.SelectedCells.Count > 0 then
             If MessageBox.Show ("Esta seguro que desea eliminar los nombres seleccionados","Eliminar tipos Decalog",MessageBoxButton.OKCancel,MessageBoxImage.Question ) =MessageBoxResult.OK then      
     
                     For Each celda As DataGridCellInfo In grdTiposDecalog.SelectedCells                                
                        nombreElim.Add (CType(celda.Item,CTDecalogData ))       
                     Next

                     For Each nombre As CTDecalogData   In nombreElim  
                        If negocio.EliminarDecalogData (nombre.ValorBuscado ,nombre.ValorCorres  ) then 
                            nombres.Remove(nombre)
                         else
                            nombreNoElim.Add (nombre)
                        End If
                                         
                     Next

              End If
          End If

         grdTiposDecalog.UpdateLayout ()


         If nombreNoElim.Count > 0 then             
            For Each nombre As  CTDecalogData   In nombreNoElim
                NombresNoElimTx.Append (nombre.ValorBuscado    & "-" & nombre.ValorCorres   )
                NombresNoElimTx.Append (", ")
            Next

            MessageBox.Show ("Los tipos Decalog: " & NombresNoElimTx.ToString () & " no pudieron ser eliminados.", "Eliminar tipos Decalog",MessageBoxButton.OK,MessageBoxImage.Exclamation ) 

         End If


      Catch ex As Exception
            MessageBox.Show("Error TI500. " & ex.Message, "Eliminar tipos Decalog", MessageBoxButton.OK, MessageBoxImage.Error)
       End Try


    End Sub

    Private Function  ObtenerCelda(ByRef miDataGrid As DataGrid, ByVal indexRow As Integer, ByVal indexCol As Integer  ) As DataGridCell 

        Try
              Dim row as DataGridRow  = miDataGrid.ItemContainerGenerator.ContainerFromIndex(indexRow)            
              Dim cellContent As Object  = miDataGrid.Columns(indexCol).GetCellContent(row)     
         
              Dim objDepend As DependencyObject = cellContent
              Dim celda As DataGridCell = Nothing       
        
               While not objDepend is Nothing 
        
                    If objDepend.GetType().Name = "DataGridCell" then 
                       celda = objDepend           
                       Return celda                                                      
                    End If
                   objDepend = VisualTreeHelper.GetParent (objDepend)   
              End While
        Catch ex As Exception
            Throw ex
        End Try
        
        Return Nothing 
End Function











End Class
